<?php
/*
    Green Manager

    sample:
        include_once 'path-to-file/gmanager.class.php';
        $smarty              = Gmanager::get('smarty');
        $smartyDefaultConfig = Gmanager::getConfig('smarty');

*/

/*
    提供 libraray 的目錄路徑
*/
defined('GMANAGER_LIBS')
    || define('GMANAGER_LIBS', realpath(dirname(__FILE__) . '/libs'));

/*
    這個目錄的存在是為了開發測試 gmanager class
    使用該 library 的使用者如果有使用 framework, 則應該不會使用到該 temp 目錄
*/
defined('GMANAGER_TMP')
    || define('GMANAGER_TMP', realpath(dirname(__FILE__) . '/tmp'));



class Gmanager
{
    /*
        取得目標物件, 該物件會有預設設定值, 在後方可加入 array config 以取代已存在的 config
        但是並不是覆蓋該 config , 請特別注意!
    */
    public function get( $key, $appendConfig=NULL )
    {
        return self::getManager($key)->get($appendConfig);
    }

    /*
        取得該服務的預設的設定檔
    */
    public function getConfig( $key )
    {
        return self::getManager($key)->getConfig();
    }

    /*
        取得界接的 manager 物件
        除非該物件有提供其它 method, 不然通常不會使用該方法
    */
    public function getManager( $key )
    {
        $key = strtolower($key);
        $file = GMANAGER_LIBS."/{$key}/{$key}.class.php";
        
        if( file_exists($file) ) {
            
            //spl_autoload_unregister(array('YiiBase','autoload'));
            include_once( $file );
            //spl_autoload_register(array('YiiBase','autoload'));
            
            $className = 'Gmanager_'.ucfirst($key);
            return new $className();
        }
        else {
            throw new Exception("gmanager error - the file not found : {$key} ");
            exit;
        }

    }

}

